package com.parent.page;

import com.parent.utils.ElasticsechUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.util.CollectionUtils;

import java.awt.print.Pageable;
import java.lang.reflect.Field;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Author yan
 * @Date 2023/7/26 0026 10:43
 * @Description
 */
public class PageUtils {

    /**
     * pagehelper分页插件分页转换
     * @param list
     * @return
     * @param <T>
     */
//    public static <T> ResultPage<T> listToPage(List<T> list){
//        PageInfo<T> pageInfo = new PageInfo<>(list);
//        int pageNumber = pageInfo.getPageNum();
//        int pageSize = pageInfo.getPageSize();
//        int pages = pageInfo.getPages();
//        long total = pageInfo.getTotal();
//        List<T> pageInfoList = pageInfo.getList();
//        ResultPage<T> resultPage = new ResultPage<>(pageInfoList, pageSize, pageNumber, pages, total);
//        return resultPage;
//    }

    /**
     * mybatis-plus 分页转化为通用分页
     * @param iPage
     * @return
     * @param <T>
     */
//    public static <T> ResultPage<T> ipageToPage(IPage<T> iPage){
//        long pages = iPage.getPages();
//        List<T> list = iPage.getRecords();
//        long total = iPage.getTotal();
//        long pageSize = iPage.getSize();
//        long pageNumber = iPage.getCurrent();
//        ResultPage<T> resultPage = new ResultPage<>(list, pageSize, pageNumber, pages, total);
//        return resultPage;
//    }

    /**
     * elasticsearch 分页转化为通用
     *
     * @param searchPage
     * @param <T>
     * @return
     */

//    public static <T> ResultPage<T> elasticsearchPageToPage(Page<SearchHit<T>> page,Class<T> aClass) {
//        List<SearchHit<T>> contents = page.getContent();
//        String string = contents.toString();
//        List<T> list =  ElasticsechUtils.elasticsechToList(string, aClass);
//        //注释出现异常
//        //List<T> list = contents.stream().map(SearchHit::getContent).collect(Collectors.toList());
//        Pageable pageable = page.getPageable();
//        long pageNumber = pageable.getPageNumber() + 1l;
//        long pageSize = pageable.getPageSize() + 0l;
//        long pages = page.getTotalPages() + 0l;
//        long total = page.getTotalElements();
//
//        ResultPage<T> resultPage = new ResultPage<>(list, pageSize, pageNumber, pages, total);
//        return resultPage;
//    }

    /**
     * elasticsearch 高亮处理
     * @param searchHits
     * @param query
     * @param fieldNames
     * @return
     * @param <T>
     * @throws IllegalAccessException
     */
//    public static <T> SearchPage<T> elasticsearchSetHighlightSearchPage(SearchHits<T> searchHits, Query query, List<String> fieldNames) throws IllegalAccessException {
//        // 处理高亮结果
//        if (!CollectionUtils.isEmpty(fieldNames)) {
//            for (SearchHit<T> searchHit : searchHits.getSearchHits()) {
//                T content = searchHit.getContent();
//
//                Class aClass = content.getClass();
//                Field[] declaredFields = aClass.getDeclaredFields();
//                for (Field declaredField : declaredFields) {
//                    //允许私有访问
//                    declaredField.setAccessible(true);
//                    //字段名
//                    String fieldName = declaredField.getName();
//                    if (fieldNames.contains(fieldName)) {
//                        //高亮设置
//                        List<String> highlights = searchHit.getHighlightField(fieldName);
//                        if (!ObjectUtils.isEmpty(highlights)) {
//                            declaredField.set(content, highlights.get(0));
//                        }
//                    }
//
//                }
//            }
//        }
//
//        // 构建分页结果
//        SearchPage<T> searchPage = SearchHitSupport.searchPageFor(searchHits, query.getPageable());
//        return searchPage;
//    }

}
